/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package propres;
import java.util.*;

/**
 *
 * @author david
 */
import java.io.Serializable;
public class estrucliente implements Serializable{
private List<cliente>[] estruc ;
   

public estrucliente(){
estruc = new ArrayList[50];
for(int i=0;i<50;i++){
    estruc[i]=new ArrayList<cliente>();
}
}

private int hash(int dni){
int i;
dni=dni%50;
return dni;
}

public void añadir_cliente(cliente c) throws Exception
{   
int h = hash(c.Get_DNI());
if(!estruc[h].contains(c)){
    estruc[h].add(c);}
else{
    throw new Exception("Existe un Cliente con dni "+ c.Get_DNI()); 
}
}
  
public boolean modificar_cliente(int dni, cliente c){

int h = hash(c.Get_DNI());
int i= 0;boolean acaba=true ;cliente co = new cliente();
Iterator it = estruc[h].iterator();
int n =estruc[h].size();

 while (it.hasNext() && acaba && i < n){
			  co=estruc[h].get(i);
			if(dni==co.Get_DNI()){ acaba=false;
			  estruc[h].set(i,c);
                        }
 i++;}
 return !acaba;
 }
public cliente buscar_cliente(int dni){ //nos devolvera el cliente que buscamos si lo encuentra y va bien, sino devuelve un cliente=null
cliente c =null;
int h = hash(dni);
int i= 0;boolean acaba=true ;cliente co = new cliente();
Iterator it = estruc[h].iterator();
int n =estruc[h].size();

 while (it.hasNext() && acaba && i < n){
			  co=estruc[h].get(i);
			if(dni==co.Get_DNI()){ 
                            acaba=false;
                            c=new cliente();
			  c=estruc[h].get(i);
                        }
 i++;}

 return c;
}

public boolean elim_cliente(int dni){ //nos devolvera el cliente que buscamos si lo encuentra y va bien, sino devuelve un cliente=null
cliente c = new cliente();
int h = hash(dni);
int i= 0;boolean acaba=true ;cliente co = new cliente();
Iterator it = estruc[h].iterator();
int n =estruc[h].size();

 while (it.hasNext() && acaba && i < n){
			  co=estruc[h].get(i);
			if(dni==co.Get_DNI()){ acaba=false;
			  estruc[h].remove(i);
                        }
 i++;}
 return !acaba;
}
public List listar_clientes(){
List list = new ArrayList();
Iterator it;
for(int i=0;i<50;i++){
    if(!estruc[i].isEmpty()){
    int n =estruc[i].size();
    it = estruc[i].iterator();
    int m =0;
    while(it.hasNext()&& m<n){//it.hasNext() es irelevante hay que quitarlo si se pasa filtro de cliente, ya que puede ser nulo, al haber insertado un cliente nulo en medio de la tabla
        list.add(estruc[i].get(m));
            m++;
    }
    }
    
}

return list;

}



}
